package com.qf.SUSECRM.controller;

import com.alibaba.fastjson.JSONObject;
import com.qf.SUSECRM.dto.UserDto;
import com.qf.SUSECRM.entity.User;
import com.qf.SUSECRM.result.ResponseCode;
import com.qf.SUSECRM.result.ResponseData;
import com.qf.SUSECRM.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 控制层主要用于拦截请求
 * Controller 表示当前层为控制层
 *
 * @RequestMapping 路径映射
 * resetful设计API（ @GetMapping）
 * 1.拦截请求，通过路径映射的方式
 * 5种常见请求
 * GET   -----   表示后台查询操作
 * POST  -----   表示后台插入操作
 * DELETE ----   表示后台删除操作
 * PUT    ----   表示后台执行所有字段更新操作
 * PATCH  ----   执行部分字段更新操作
 * 2.接受请求中的参数（采用json数据格式）
 * 参数存放在路径中   get（参数较少）
 * 参数存放在body中   post，delete--
 */
@RestController
@RequestMapping("users")
public class UserController {

    /*
        @Autowired自动装配实现类
     */
    @Autowired
    private UserService userService;


    @PatchMapping("{id}/{name}")
    public ResponseData updateById(@PathVariable Integer id, @PathVariable String name) {
        Integer num = userService.updateNameById(id, name);
        return new ResponseData(ResponseCode.SUCCESS,num+1);
    }

    @GetMapping
    public String query() {
        return "这是一个请求";
    }

    @GetMapping("{id}")
    public String queryById(@PathVariable("id") Integer id) {
        return "这是一个请求" + id;
    }

    @GetMapping("{id}/{name}")
    public String queryByCondition(@PathVariable String id, @PathVariable String name) {
        return id + name;
    }

    @PostMapping
    public User insert(@RequestBody User user) {
        return user;
    }

    @DeleteMapping
    public String delete(@RequestBody String data) {
        JSONObject jsonObject = JSONObject.parseObject(data);
        Integer id = (Integer) jsonObject.get("id");
        String name = (String) jsonObject.get("name");
        return id + "--------" + name;
    }

    /**
     * 参数放在 body 请求体中 必须json格式
     *
     * @return
     */
    @PutMapping
    public UserDto update(@RequestBody UserDto userDto) {
        return userDto;
    }

}
